package com.example.exampleproject.enumutils;

import org.apache.ibatis.type.BaseTypeHandler;
import org.apache.ibatis.type.JdbcType;

import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

//书写枚举处理器
public class GenderEnumHandler3 extends BaseTypeHandler<GenderEnum3> {

   //用于定义设置参数时，该如何把Java类型的参数转换为对应的数据库类型
    @Override
    public void setNonNullParameter(PreparedStatement preparedStatement, int i, GenderEnum3 genderEnum, JdbcType jdbcType) throws SQLException {
        //第二个参数 : 存入到数据库中的值
         preparedStatement.setInt(i,genderEnum.getCode());
    }
    //用于定义通过字段名称获取字段数据时，如何把数据库类型转换为对应的Java类型
    @Override
    public GenderEnum3 getNullableResult(ResultSet resultSet, String columnName) throws SQLException {
        // 根据数据库存储类型决定获取类型，本例子中数据库中存放String类型

        int code = resultSet.getInt(columnName);
        System.out.println("columnName: "+columnName+"  code: ");
        if (resultSet.wasNull()){
            return null;
        }else {
          return GenderEnum3.getGenderEnumByCode(code);
        }
    }

    /**
     * 用于定义通过字段索引获取字段数据时，如何把数据库类型转换为对应的Java类型
     */
    @Override
    public GenderEnum3 getNullableResult(ResultSet resultSet, int columnIndex) throws SQLException {

        // 根据数据库存储类型决定获取类型，本例子中数据库中存放String类型
        int code = resultSet.getInt(columnIndex);
        if (resultSet.wasNull()){
            return null;
        }else {
            // 根据数据库中的code值，定位SexEnum子类
            return GenderEnum3.getGenderEnumByCode(code);
        }

    }

    /**
     * 用定义调用存储过程后，如何把数据库类型转换为对应的Java类型
     */
    @Override
    public GenderEnum3 getNullableResult(CallableStatement callableStatement, int columnIndex) throws SQLException {

        int code = callableStatement.getInt(columnIndex);
        if (callableStatement.wasNull()){
            return null;
        }else {
           return GenderEnum3.getGenderEnumByCode(code) ;
        }


    }
}
